package com.jl.mapper;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jl.model.DevicePart;
import com.jl.model.in.DevicePartIn;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 设备的部位列表信息 Mapper 接口
 * </p>
 *
 * @author JiangJian
 * @since 2019-03-19
 */
public interface DevicePartMapper extends BaseMapper<DevicePart> {

    /**
     * 查询设备部位列表
     * 这里的Param中必须使用 ew为名称 这是因为使用了mybatisplus中的内定的参数
     * 且在xml中必须是使用 美元符 $ 来作为占位符
     * @param page
     * @param qw
     * @return
     */
    List<Map<String,Object>> selectDataGrid(Page<Map<String,Object>> page, @Param("ew") QueryWrapper<DevicePart> qw);

    /**
     * 设备在本周(月)的重复故障部位
     * @param deviceId 设备id
     * @param type 1:表示week 2：表示 month
     * @param time 日期或者是某月
     * @return
     */
    List<DevicePart> selectWeekMonthRepeatPart(@Param("deviceId")Long deviceId,@Param("type")Integer type,@Param("time")String time);


    /**
     * 更新部位的故障次数
     * @param faultCount 故障次数
     * @param partId 部位id
     * @return
     */
    Integer updatePartFaultCount(@Param("faultCount") Integer faultCount,@Param("partId") Long partId);

    /**
     * 更新部位的故障次数
     * @param faultCount 故障次数
     * @param partIds 部位id
     * @return
     */
    Integer updatePartFaultCountWithIds(@Param("faultCount") Integer faultCount,@Param("partIds") List<Long> partIds);

    /**
     * 通过id列表来获取集合
     * @param page 分页参数
     * @param ids id列表
     * @return
     */
    List<Map<String,Object>> selectDevicePartDataGridByIds(Page<Map<String,Object>> page, @Param("ids") List<Long> ids);


    /**
     * 查询某类型的部位是否用重复故障(damage_part中获取id信息，device_part中获取具体信息)
     * @param modelId 设备类型id
     * @param partIds 部位id列表
     * @return
     */
    List<DevicePart> selectRepeatFailPart(@Param("modelId")Long modelId, @Param("partIds") List<Long> partIds);
    /**
     *
     * @param name 名称
     * @return 结果数量
     */
    Integer selectDevicePartCount(@Param("name") String name);

    DevicePartIn selectDevicePartInByName(@Param("name") String name);












    /**
     * 统计故障部位top
     * @param top top几
     * @param startTime 起始时间
     * @param endTime 结束时间
     * @return 数据信息
     */
    List<Map<String,Object>> selectTopFaultCountDevicePart(@Param("top") Integer top,@Param("startTime") String startTime,@Param("endTime") String endTime);

    /**
     * 统计更换配件部位 top
     * @param top top几
     * @param startTime 起始时间
     * @param endTime 结束时间
     * @return 数据信息
     */
    List<Map<String,Object>> selectTopChangeComponentDevicePart(@Param("top") Integer top,@Param("startTime") String startTime,@Param("endTime") String endTime);

}
